home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Hot Mix 17
/
Hot Mix 17.iso
/
HM17_SGI
/
research
/
lib
/
standardize.pro
< prev
next >
Wrap
Text File
|
1997-07-08
|
4KB
|
99 lines
; $Id: standardize.pro,v 1.6 1997/01/15 03:11:50 ali Exp $
;
; Copyright (c) 1996-1997, Research Systems, Inc. All rights reserved.
; Unauthorized reproduction prohibited.
;+
; NAME:
; STANDARDIZE
;
; PURPOSE:
; This function computes standardized variables from an array
; of M variables (columns) and N observations (rows). The result
; is an M-column, N-row array where all columns have a mean of
; zero and a variance of one.
;
; CATEGORY:
; Statistics
;
; CALLING SEQUENCE:
; Result = Standardize(A)
;
; INPUTS:
; A: An M-column, N-row array of type float or double.
;
; KEYWORD PARAMETERS:
; DOUBLE: If set to a non-zero value, computations are done in
; double precision arithmetic.
;
; EXAMPLE:
; Define an array with 4 variables and 20 observations.
; array = $
; [[19.5, 43.1, 29.1, 11.9], $
; [24.7, 49.8, 28.2, 22.8], $
; [30.7, 51.9, 37.0, 18.7], $
; [29.8, 54.3, 31.1, 20.1], $
; [19.1, 42.2, 30.9, 12.9], $
; [25.6, 53.9, 23.7, 21.7], $
; [31.4, 58.5, 27.6, 27.1], $
; [27.9, 52.1, 30.6, 25.4], $
; [22.1, 49.9, 23.2, 21.3], $
; [25.5, 53.5, 24.8, 19.3], $
; [31.1, 56.6, 30.0, 25.4], $
; [30.4, 56.7, 28.3, 27.2], $
; [18.7, 46.5, 23.0, 11.7], $
; [19.7, 44.2, 28.6, 17.8], $
; [14.6, 42.7, 21.3, 12.8], $
; [29.5, 54.4, 30.1, 23.9], $
; [27.7, 55.3, 25.7, 22.6], $
; [30.2, 58.6, 24.6, 25.4], $
; [22.7, 48.2, 27.1, 14.8], $
; [25.2, 51.0, 27.5, 21.1]]
;
; Compute the mean and variance of each variable using the MOMENT
; function. Note: The skewness and kurtosis are also computed.
; IDL> for k = 0, 3 do print, MOMENT(array[k,*])
; 25.3050 25.2331 -0.454763 -1.10028
; 51.1700 27.4012 -0.356958 -1.19516
; 27.6200 13.3017 0.420289 0.104912
; 20.1950 26.0731 -0.363277 -1.24886
;
; Compute the standardized variables.
; IDL> result = STANDARDIZE(array)
;
; Compute the mean and variance of each standardized variable using
; the MOMENT function. Note: The skewness and kurtosis are also computed.
; IDL> for k = 0, 3 do print, MOMENT(result[k,*])
; -7.67130e-07 1.00000 -0.454761 -1.10028
; -3.65451e-07 1.00000 -0.356958 -1.19516
; -1.66707e-07 1.00000 0.420290 0.104913
; 4.21703e-07 1.00000 -0.363278 -1.24886
;
; MODIFICATION HISTORY:
; Written by: GGS, RSI, February 1996
;-
FUNCTION Standardize, X, Double = Double
ON_ERROR, 2
Sx = SIZE(X)
if Sx[Sx[0]+1] ne 4 and Sx[Sx[0]+1] ne 5 then $
MESSAGE, "Input array must be float or double."
if N_ELEMENTS(Double) eq 0 then Double = (Sx[Sx[0]+1] eq 5)
if Sx[0] eq 2 then begin ;Standardize the columns of X.
xSTD = FLTARR(Sx[1], Sx[2], /nozero) ;Output array.
if Double ne 0 then xSTD = DOUBLE(xSTD)
no = Sx[2] ;# of observations
mean = TOTAL(X, 2, DOUBLE = Double) / no ;Vector of Means
xstd = X - (mean # REPLICATE(1, No)) ;Deviations from means
stdev = SQRT(TOTAL(xstd^2, 2, Double = Double) / (No-1)) ;Vector of Stdevs
if Double eq 0 then RETURN, FLOAT(xstd * ((1./stdev) # replicate(1, No))) $
else RETURN, xstd * ((1./stdev) # replicate(1, No)) ;Normalize by 1./Stdev
endif $
else MESSAGE, "Input array must be two-dimensional."
END